iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
2
Modern Web

輕量高效.NET Core開源Blog引擎:Miniblog.Core系列 第 25

25.NET Core密碼PBKDF2加密方式處理

  • 分享至 

  • xImage
  •  

  在正式專案中密碼少不了需要加鹽處理,其中最常見的就是HASH。HASH算法是單向的,而且無法被反向計算。源頭數據改動一點點,HASH的結果也會完全不同。這樣特性很適合保存、驗證密碼。

  但只有單純hash加上密碼簡單的話,怪客可以用暴力比對方式,得出你的密碼,所以在Miniblog使用廣受認證的PBKDF2方式加密。


Code:

private bool VerifyHashedPassword(string password, IConfiguration config)
{
    byte[] saltBytes = Encoding.UTF8.GetBytes(config["user:salt"]);

    byte[] hashBytes = KeyDerivation.Pbkdf2(
        password: password,
        salt: saltBytes,
        prf: KeyDerivationPrf.HMACSHA1,
        iterationCount: 1000,
        numBytesRequested: 256 / 8
    );

    string hashText = BitConverter.ToString(hashBytes).Replace("-", string.Empty);
    return hashText == config["user:password"];
}

使用、原理:

使用方式很簡單,安裝NuGet KeyDerivation 就好:

Install-Package Microsoft.AspNetCore.Cryptography.KeyDerivation -Version 版本

KeyDerivation.Pbkdf2方法,使用五個參數 :
1.password 顧名思義就是密碼,不多解釋。
2.salt,這邊可以使用一個密鑰key只有你知道,藉由Encoding.UTF8.GetBytes轉成byt陣列資料,傳進Pbkdf2參數,當鹽使用。
3.prf,PRF是一個偽隨機函數
4.iterationCount,hash次數,次數的不同,得出結果也會不同,通常越多次代表怪客破解難度變高,但效能會差點
5.numBytesRequested,指定得出結果長度

public static byte[] Pbkdf2(string password, byte[] salt, KeyDerivationPrf prf, int iterationCount, int numBytesRequested);

上一篇
24.XML資料保存出現0x1D is an invalid character錯誤
下一篇
26.改連結字串,替換不同資料庫功能
系列文
輕量高效.NET Core開源Blog引擎:Miniblog.Core30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言